// GeneratorSettings.java
package com.plugin.mybtaisxplus.dialog; // 包声明：定义对话框的子包路径

import java.util.ArrayList; // 导入：动态数组列表
import java.util.List; // 导入：列表接口
import java.awt.Dimension;//导入 Dimension 类，用于存储UI组件的尺寸

/**
 * 一个单一的、可传递的数据模型类，用于持有整个向导过程中的所有设置。
 */
public class GeneratorSettings { // 类定义：生成器设置

    // --- 第一步的设置 ---
    private String modulePath = ""; // 字段：模块路径
    private String basePackage = "com.example.project"; // 字段：基础包路径
    private String entityPackage = "entity"; // 字段：实体类包
    private String queryPackage = "dto"; // 字段：查询类包
    private List<String> tableNames = new ArrayList<>(); // 字段：原始表名列表
    private List<String> classNames = new ArrayList<>(); // 字段：最终生成的类名列表
    private String mapperPackage = "mapper";
    private String xmlPackage = "mapper.xml"; // 注意：这是相对于 resources 的路径
    private String servicePackage = "service";
    private String serviceImplPackage = "service.impl";
    private String controllerPackage = "controller";
    private String author = System.getProperty("user.name"); // 默认作者

    private String superClass = ""; // 用于存储Controller父类的全限定名
    private String responseWrapperClass = ""; // 返回值包装类
    private String successMethodName = "success"; // 成功标识/方法名，并提供默认值
    private String failureMethodName = "fail";    // 失败标识/方法名，并提供默认值
    // 用于存储要忽略的字段前后缀的字段
    private String ignoreFieldPrefix = "";
    private String ignoreFieldSuffix = "";
    // ... 可在此添加第一步对话框中的所有其他字段，如 ignorePrefix, superClass 等
    public static final String ANNOTATION_NONE = "None";
    public static final String ANNOTATION_MP2 = "Mybatis-Plus 2";
    public static final String ANNOTATION_MP3 = "Mybatis-Plus 3";
    public static final String ANNOTATION_JPA = "JPA";
    // --- 第二步的设置 ---
    private List<FileConfig> fileConfigs = new ArrayList<>(); // 字段：文件生成配置列表
    private String annotation; // 字段：选择的注解类型
    // ... 可在此添加第二步对话框中的所有其他字段，如 options, template 等
    private Dimension wizardPreferredSize; // 字段：用于存储向导窗口的首选尺寸，以保持步骤间大小一致
    // --- 所有字段的 Getter 和 Setter 方法 ---
    // 【新增】用于存储“选项”多选框的状态
    private boolean useLombok = true; // 默认勾选
    private boolean useJsr310 = false;
    // ... 可以为其他所有 JCheckBox 添加对应的布尔字段

    // 【新增】用于存储“模板”单选按钮组的选择
    private String templateSetName = "mybatis-plus3"; // 默认选择
    private boolean generateToString = true;
    // 【新增】对应“选项”面板的所有 JCheckBox
    private boolean generateComments = true;
    private boolean useActualColumnAnnotation = true; // 对应“实际的列注解”
    public String getModulePath() { // 方法：获取模块路径
        return modulePath; // 返回：模块路径
    }

    public void setModulePath(String modulePath) { // 方法：设置模块路径
        this.modulePath = modulePath; // 赋值
    }

    public String getBasePackage() { // 方法：获取基础包
        return basePackage; // 返回：基础包
    }

    public void setBasePackage(String basePackage) { // 方法：设置基础包
        this.basePackage = basePackage; // 赋值
    }

    public String getEntityPackage() { // 方法：获取实体类包
        return entityPackage; // 返回：实体类包
    }

    public void setEntityPackage(String entityPackage) { // 方法：设置实体类包
        this.entityPackage = entityPackage; // 赋值
    }

    public String getQueryPackage() { // 方法：获取查询类包
        return queryPackage; // 返回：查询类包
    }

    public void setQueryPackage(String queryPackage) { // 方法：设置查询类包
        this.queryPackage = queryPackage; // 赋值
    }

    public List<String> getTableNames() { // 方法：获取表名列表
        return tableNames; // 返回：表名列表
    }

    public void setTableNames(List<String> tableNames) { // 方法：设置表名列表
        this.tableNames = tableNames; // 赋值
    }

    public List<String> getClassNames() { // 方法：获取类名列表
        return classNames; // 返回：类名列表
    }

    public void setClassNames(List<String> classNames) { // 方法：设置类名列表
        this.classNames = classNames; // 赋值
    }

    public List<FileConfig> getFileConfigs() { // 方法：获取文件配置列表
        return fileConfigs; // 返回：文件配置列表
    }

    public void setFileConfigs(List<FileConfig> fileConfigs) { // 方法：设置文件配置列表
        this.fileConfigs = fileConfigs; // 赋值
    }

    public String getAnnotation() { // 方法：获取注解
        return annotation; // 返回：注解
    }

    public void setAnnotation(String annotation) { // 方法：设置注解
        this.annotation = annotation; // 赋值
    }

    public Dimension getWizardPreferredSize() { // 方法：获取向导首选尺寸
        return wizardPreferredSize; // 返回：尺寸对象
    }

    public void setWizardPreferredSize(Dimension wizardPreferredSize) { // 方法：设置向导首选尺寸
        this.wizardPreferredSize = wizardPreferredSize; // 赋值
    }

    public String getMapperPackage() {
        return mapperPackage;
    }

    public void setMapperPackage(String mapperPackage) {
        this.mapperPackage = mapperPackage;
    }

    public String getXmlPackage() {
        return xmlPackage;
    }

    public void setXmlPackage(String xmlPackage) {
        this.xmlPackage = xmlPackage;
    }

    public String getServicePackage() {
        return servicePackage;
    }

    public void setServicePackage(String servicePackage) {
        this.servicePackage = servicePackage;
    }

    public String getServiceImplPackage() {
        return serviceImplPackage;
    }

    public void setServiceImplPackage(String serviceImplPackage) {
        this.serviceImplPackage = serviceImplPackage;
    }

    public String getControllerPackage() {
        return controllerPackage;
    }

    public void setControllerPackage(String controllerPackage) {
        this.controllerPackage = controllerPackage;
    }

    public String getAuthor() {
        return author;
    }

    public void setAuthor(String author) {
        this.author = author;
    }

    // 为新字段添加 Getter 和 Setter
    public String getIgnoreFieldPrefix() {
        return ignoreFieldPrefix;
    }

    public void setIgnoreFieldPrefix(String ignoreFieldPrefix) {
        this.ignoreFieldPrefix = ignoreFieldPrefix;
    }

    public String getIgnoreFieldSuffix() {
        return ignoreFieldSuffix;
    }

    public void setIgnoreFieldSuffix(String ignoreFieldSuffix) {
        this.ignoreFieldSuffix = ignoreFieldSuffix;
    }

    public String getSuperClass() {
        return superClass;
    }

    public void setSuperClass(String superClass) {
        this.superClass = superClass;
    }
    // 为新字段添加 Getter 和 Setter
    public String getSuccessMethodName() {
        return successMethodName;
    }

    public void setSuccessMethodName(String successMethodName) {
        this.successMethodName = successMethodName;
    }

    public String getFailureMethodName() {
        return failureMethodName;
    }

    public void setFailureMethodName(String failureMethodName) {
        this.failureMethodName = failureMethodName;
    }
    public String getResponseWrapperClass() {
        return responseWrapperClass;
    }

    public void setResponseWrapperClass(String responseWrapperClass) {
        this.responseWrapperClass = responseWrapperClass;
    }
    public boolean isUseLombok() {
        return useLombok;
    }

    public void setUseLombok(boolean useLombok) {
        this.useLombok = useLombok;
    }

    public String getTemplateSetName() {
        return templateSetName;
    }

    public void setTemplateSetName(String templateSetName) {
        this.templateSetName = templateSetName;
    }
    public boolean isGenerateComments() { return generateComments; }
    public void setGenerateComments(boolean generateComments) { this.generateComments = generateComments; }
    public boolean isUseActualColumnAnnotation() { return useActualColumnAnnotation; }
    public void setUseActualColumnAnnotation(boolean useActualColumnAnnotation) { this.useActualColumnAnnotation = useActualColumnAnnotation; }

    public boolean isUseJsr310() {
        return useJsr310;
    }
    public void setUseJsr310(boolean useJsr310) {
        this.useJsr310 = useJsr310;
    }

    public boolean isGenerateToString() {
        return generateToString;
    }
    public void setGenerateToString(boolean generateToString) {
        this.generateToString = generateToString;
    }
}